package v1

import (
	"gf-vben-admin/internal/model/system"
	"gf-vben-admin/internal/model/system/entity"
	"github.com/gogf/gf/v2/frame/g"
	"github.com/gogf/gf/v2/os/gtime"
)

//UserPageListReq 分页查询用户表Req
type UserPageListReq struct {
	g.Meta `path:"/pageList" tags:"User" method:"post" summary:"分页查询用户表"`
	system.User
}

//UserPageListRes 分页查询用户表Res
type UserPageListRes struct {
	Total int            `json:"total" dc:"行数"`
	Rows  []*entity.User `json:"rows" dc:"用户表数组"`
}

//UserListReq 列表查询用户表Req
type UserListReq struct {
	g.Meta `path:"/list" tags:"User" method:"post" summary:"列表查询用户表"`
	*entity.User
}

//UserListRes 列表查询Res
type UserListRes struct {
	Rows []*entity.User `json:"rows" dc:"用户表数组"`
}

//UserAddReq 添加用户表Req
type UserAddReq struct {
	g.Meta                `path:"/" tags:"User" method:"post" summary:"添加用户表"`
	TenantCode            string      `json:"tenantCode" v:"required#租户编码不能为空"  dc:"租户编码"`
	LoginName             string      `json:"loginName" v:"required#用户名不能为空"  dc:"用户名"`
	Email                 string      `json:"email"   dc:"邮箱"`
	HashPassword          string      `json:"hashPassword"   dc:"Hash后的用户密码"`
	RealName              string      `json:"realName" v:"required#用户真实姓名不能为空"  dc:"用户真实姓名"`
	Phone                 string      `json:"phone"   dc:"手机号码"`
	ImageUrl              string      `json:"imageUrl"   dc:"用户头像地址"`
	ProfilePhoto          string      `json:"profilePhoto"   dc:"用户二进制头像"`
	Language              string      `json:"language"   dc:"语言"`
	TimeZone              string      `json:"timeZone" v:"required#时区不能为空"  dc:"时区"`
	LastPasswordUpdatedAt *gtime.Time `json:"lastPasswordUpdatedAt" v:"required#上一次密码更新时间不能为空"  dc:"上一次密码更新时间"`
	LastLoginAt           *gtime.Time `json:"lastLoginAt"   dc:"上一次登陆时间"`
	IsLocked              int8        `json:"isLocked" v:"required#是否锁定账户不能为空"  dc:"是否锁定账户"`
	IsAdmin               int8        `json:"isAdmin"   dc:"是否为管理员用户。1表示是，0表示不是"`
	LockedUntilAt         *gtime.Time `json:"lockedUntilAt"   dc:"锁定账户截止时间"`
	PasswordAttempt       int8        `json:"passwordAttempt"   dc:"密码输错累积次数"`
	UserType              string      `json:"userType" v:"required#用户类型(P/C)，平台用户/C端用户，默认P不能为空"  dc:"用户类型(P/C)，平台用户/C端用户，默认P"`
	State                 int8        `json:"state" v:"required#状态（1正常 0停用）不能为空"  dc:"状态（1正常 0停用）"`
}

//UserAddRes 添加用户表Req
type UserAddRes struct {
	Msg string `json:"msg" dc:"添加提示"`
}

//UserEditReq 编辑用户表Req
type UserEditReq struct {
	g.Meta                `path:"/" tags:"User" method:"put" summary:"编辑用户表"`
	Id                    int64       `json:"id" v:"required#ID不能为空"  dc:"ID"`             //主键
	VersionNumber         string      `json:"versionNumber" v:"required#未识别到版本号" dc:"版本号"` //版本号
	TenantCode            string      `json:"tenantCode" v:"required#租户编码不能为空"  dc:"租户编码"`
	LoginName             string      `json:"loginName" v:"required#用户名不能为空"  dc:"用户名"`
	Email                 string      `json:"email"   dc:"邮箱"`
	HashPassword          string      `json:"hashPassword"   dc:"Hash后的用户密码"`
	RealName              string      `json:"realName" v:"required#用户真实姓名不能为空"  dc:"用户真实姓名"`
	Phone                 string      `json:"phone"   dc:"手机号码"`
	ImageUrl              string      `json:"imageUrl"   dc:"用户头像地址"`
	ProfilePhoto          string      `json:"profilePhoto"   dc:"用户二进制头像"`
	Language              string      `json:"language"   dc:"语言"`
	TimeZone              string      `json:"timeZone" v:"required#时区不能为空"  dc:"时区"`
	LastPasswordUpdatedAt *gtime.Time `json:"lastPasswordUpdatedAt" v:"required#上一次密码更新时间不能为空"  dc:"上一次密码更新时间"`
	LastLoginAt           *gtime.Time `json:"lastLoginAt"   dc:"上一次登陆时间"`
	IsLocked              int8        `json:"isLocked" v:"required#是否锁定账户不能为空"  dc:"是否锁定账户"`
	IsAdmin               int8        `json:"isAdmin"   dc:"是否为管理员用户。1表示是，0表示不是"`
	LockedUntilAt         *gtime.Time `json:"lockedUntilAt"   dc:"锁定账户截止时间"`
	PasswordAttempt       int8        `json:"passwordAttempt"   dc:"密码输错累积次数"`
	UserType              string      `json:"userType" v:"required#用户类型(P/C)，平台用户/C端用户，默认P不能为空"  dc:"用户类型(P/C)，平台用户/C端用户，默认P"`
	State                 int8        `json:"state" v:"required#状态（1正常 0停用）不能为空"  dc:"状态（1正常 0停用）"`
}

//UserEditRes 编辑用户表Res
type UserEditRes struct {
	Msg string `json:"msg" dc:"编辑提示"`
}

//UserEditStateReq 编辑用户表状态Req
type UserEditStateReq struct {
	g.Meta `path:"/state" tags:"User" method:"put" summary:"批量编辑用户表状态"`
	Ids    []int64 `json:"ids" v:"required#字典主键不能为空"  dc:"id集合"`   //主键
	State  int8    `json:"state" v:"required#字典状态不能为空"  dc:"字典状态"` //状态
}

//UserDelReq 删除用户表Req
type UserDelReq struct {
	g.Meta `path:"/" tags:"User" method:"delete" summary:"删除用户表"`
	Ids    []int64 `json:"ids" v:"required#请选择需要删除的数据" dc:"id集合"`
}

//UserDelRes 删除用户表Res
type UserDelRes struct {
	Msg string `json:"msg" dc:"删除提示"`
}

type UserGetInfoReq struct {
	g.Meta `path:"/info" method:"get" tags:"User" summary:"获取当前用户信息"`
}

type UserGetInfoRes struct {
	entity.User
}
